home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / t_os / bricon / source / oak.asm < prev    next >
Assembly Source File  |  1991-10-18  |  28KB  |  1,576 lines

  1. ;******************************************
  2. ;*
  3. ;*    OAK2FEP v1.04
  4. ;*
  5. ;*    90.07.31    Apend kancnvflg & enc_cnt Bug Fix By Ken
  6. ;*
  7. ;******************************************
  8.     .286c
  9. _TEXT    SEGMENT  BYTE PUBLIC 'CODE'
  10. _TEXT    ENDS
  11. _DATA    SEGMENT  WORD PUBLIC 'DATA'
  12. _DATA    ENDS
  13. CONST    SEGMENT  WORD PUBLIC 'CONST'
  14. CONST    ENDS
  15. _BSS    SEGMENT  WORD PUBLIC 'BSS'
  16. _BSS    ENDS
  17. DGROUP    GROUP     _TEXT,    CONST,    _BSS,    _DATA
  18.  
  19.     ASSUME  CS: DGROUP, DS: DGROUP, ES: DGROUP
  20.  
  21. _TEXT      SEGMENT
  22.  
  23. ;*******************************************
  24. ;*    ORICON40用にアセブルするなら
  25. ;*    LINE40を定義すること
  26. ;*    ゲェ失敗じゃ
  27. ;*    仮想VRAMがC800:1000以上に無い!
  28. ;*******************************************
  29. ;LINE40    equ    1
  30. ;*******************************************
  31.  
  32. TRUE    equ    1
  33. FALSE    equ    0
  34. ;
  35. ;キーアドレス
  36. ;
  37. sCAP    equ    55h
  38. sHIRA    equ    56h
  39. sKATA    equ    5Ah
  40.  
  41. sEIJI    equ    6Ah
  42. sEIKO    equ    6Fh
  43. sMUHEN    equ    57h
  44. sHENKAN    equ    58h
  45.  
  46. sKANJI    equ    59h
  47. sZENHAN    equ    71h
  48.  
  49. ;
  50. ;モ-ドフラグ
  51. ;
  52. mKANJI    equ    0002h
  53. mROMA    equ    0008h
  54. mZEN    equ    0020h
  55. mKATA    equ    0080h
  56. mHIRA    equ    0100h
  57.  
  58. ;
  59. ;  かな漢字変換用構造体定義
  60. ;
  61. Funcparm    struc
  62.     wFunc        dw    ?
  63.     wMode        dw    ?
  64.     lpKkname    dd    far
  65.     lpDataparm    dd    far
  66.     wHandle        dw    ?
  67.     Reserved_f    db    2 dup(0)
  68. Funcparm    ends
  69.  
  70. Kkname        struc
  71.     wLevel        dw    ?
  72.     rgchName    db    8 dup(?)
  73.     rgchVersion    db    4 dup(?)
  74.     rgchRevision    db    4 dup(?)
  75.     Reserved_k    db    14 dup(0)
  76. Kkname        ends
  77.  
  78. Dataparm    struc
  79.     wType        dw    0
  80.     wScan        dw    0
  81.     wAscii        dw    0
  82.     wStatus        dw    0
  83.  
  84.     cchResult    dw    0
  85.     lpchResult    dd    far
  86.  
  87.     cchMode        dw    0
  88.     lpchMode    dd    far
  89.     lpattrMode    dd    far
  90.  
  91.     cchSystem    dw    0
  92.     lpchSystem    dd    far
  93.     lpattrSystem    dd    far
  94.  
  95.     cchBuf        dw    0
  96.     lpchBuf        dd    far
  97.     lpattrBuf    dd    far
  98.     cchBufCursor    dw    0
  99.     cchBufAct    dw    0
  100.  
  101.     cchHomonym    dw    0
  102.     lpchHomonym    dd    far
  103.     cchHomonymAct    dw    0
  104.     cchHomonymTotal    dw    0
  105.     cchHomonymNum    dw    0
  106.  
  107.     fKanji        dw    ?
  108.     fNtype        dw    ?
  109.  
  110.     Reserved_d    db    16 dup(0)
  111. Dataparm    ends
  112.  
  113. ;
  114. ;
  115. ;
  116. MAX_X    equ    80
  117. ifdef    LINE40
  118.   MAX_Y    equ    39
  119. else
  120.   MAX_Y    equ    24
  121. endif
  122. ;
  123. ;  データ領域
  124. ;
  125.  
  126. fnc    Funcparm    <>
  127. knm    Kkname        <>
  128. dat    Dataparm    <>
  129. buf_size    equ    100
  130. buf        db    8 dup(buf_size dup(0))
  131. vct_90h        dd    far
  132. vct_91h        dd    far
  133. Slock        db    FALSE
  134. modeW        dw    0056h or 8000h
  135. modeB        dd    far
  136.         dd    far
  137. modeS        db    34h,41h, 21h,21h, ' ', 31h,51h, 3Eh,2Eh
  138. modeA        db    1,0,7,0,3,0,7,0        ;
  139.         db    1,0,7,0,3,0,7,0
  140.         db    0,0,7,0
  141.         db    1,0,7,0,3,0,7,0
  142.         db    1,0,7,0,3,0,7,0
  143. old_cchS    dw    0
  144.         db    4*buf_size dup(0)
  145. old_cchB    dw    0
  146.         db    4*buf_size dup(0)
  147. cchR_p        dw    0
  148. color        dd    0
  149. bak_xy        dw    0
  150. ent_xy        dw    0
  151. dmy_key        db    0
  152. k_kind        db    ?
  153. kancnvflg    db    0
  154. key_tbl        db    16 dup(?)
  155.  
  156. enc_cnt        dw    0        ;bug fixed at v1.00
  157. enc_str        db    7 dup (0)
  158.  
  159. t1_msg    db    '単語登録 '
  160.     db    '登録位置にカ-ソルを移動して実行キ-を押してください'
  161. t1_msgL    equ    $-t1_msg
  162. t1_atr    db    8 dup (8),t1_msgL-8 dup(1)
  163. t2_msg    db    '単語登録 '
  164.     db    '登録範囲を指定してください'
  165. t2_msgL    equ    $-t2_msg
  166. ;
  167. ;  かな漢字変換関数
  168. ;
  169. KKfunc    proc    near
  170.     push    es
  171.     push    ds
  172.     push    bx
  173.     push    cx
  174.     push    dx
  175.     push    si
  176.     push    di
  177.     mov    ax,cs
  178.     mov    ds,ax
  179.     mov    es,ax
  180.  
  181.     mov    ax,fnc.wFunc
  182.     mov    bx,offset fnc
  183.     mov    cx,offset fnc
  184.     mov    dx,offset fnc
  185.     mov    di,offset fnc
  186.     mov    si,offset fnc
  187.  
  188.     int    0EEh
  189.     pop    di
  190.     pop    si
  191.     pop    dx
  192.     pop    cx
  193.     pop    bx
  194.     pop    ds
  195.     pop    es
  196.     ret
  197. KKfunc    endp
  198.  
  199. KKOpen    proc    near
  200.     mov    fnc.wFunc,2
  201.     mov    fnc.wHandle,1
  202.     mov    ax,ds
  203.     mov    word ptr fnc.lpKkname,offset knm
  204.     mov    word ptr fnc.lpKkname+2,ax
  205.     mov    word ptr fnc.lpDataparm,offset dat
  206.     mov    word ptr fnc.lpDataparm+2,ax
  207.     mov    dat.wType,1    ;0にしてもシステムではやってくれない(バカ!)
  208.     call    KKfunc
  209.     ret
  210. KKOpen    endp
  211.  
  212. KKClose    proc    near
  213.     mov    fnc.wFunc,3
  214.     mov    fnc.wMode,0
  215.     mov    word ptr fnc.lpKkname,0
  216.     mov    word ptr fnc.lpKkname+2,0
  217.     mov    word ptr fnc.lpDataparm,0
  218.     mov    word ptr fnc.lpDataparm+2,0
  219.     call    KKfunc
  220.     ret
  221. KKClose    endp
  222.  
  223. KKInOut    proc    near
  224.     mov    fnc.wFunc,4
  225.     mov    fnc.wMode,0
  226.     mov    word ptr fnc.lpKkname,0
  227.     mov    word ptr fnc.lpKkname+2,0
  228.     mov    ax,ds
  229.     mov    word ptr fnc.lpDataparm,offset dat
  230.     mov    word ptr fnc.lpDataparm+2,ax
  231.  
  232.     mov    word ptr dat.lpchResult,offset buf[0]
  233.     mov    word ptr dat.lpchResult+2,ax
  234.     mov    word ptr dat.lpchMode,offset buf[1*buf_size]
  235.     mov    word ptr dat.lpchMode+2,ax
  236.     mov    word ptr dat.lpattrMode,offset buf[2*buf_size]
  237.     mov    word ptr dat.lpattrMode+2,ax
  238.     mov    word ptr dat.lpchSystem,offset buf[3*buf_size]
  239.     mov    word ptr dat.lpchSystem+2,ax
  240.     mov    word ptr dat.lpattrSystem,offset buf[4*buf_size]
  241.     mov    word ptr dat.lpattrSystem+2,ax
  242.     mov    word ptr dat.lpchBuf,offset buf[5*buf_size]
  243.     mov    word ptr dat.lpchBuf+2,ax
  244.     mov    word ptr dat.lpattrBuf,offset buf[6*buf_size]
  245.     mov    word ptr dat.lpattrBuf+2,ax
  246.     mov    word ptr dat.lpchHomonym,offset buf[7*buf_size]
  247.     mov    word ptr dat.lpchHomonym+2,ax
  248.     call    KKfunc
  249.     ret
  250. KKInOut    endp
  251.  
  252. KKMode    proc    near
  253.     mov    fnc.wFunc,5
  254.     mov    word ptr fnc.lpKkname,0
  255.     mov    word ptr fnc.lpKkname+2,0
  256.     mov    ax,ds
  257.     mov    word ptr fnc.lpDataparm,offset dat
  258.     mov    word ptr fnc.lpDataparm+2,ax
  259.     call    KKfunc
  260.     ret
  261. KKMode    endp
  262.  
  263. KKTrans    proc    near
  264.     mov    fnc.wFunc,6
  265.     mov    fnc.wMode,0
  266.     mov    word ptr fnc.lpKkname,0
  267.     mov    word ptr fnc.lpKkname+2,0
  268.     mov    ax,ds
  269.     mov    word ptr fnc.lpDataparm,offset dat
  270.     mov    word ptr fnc.lpDataparm+2,ax
  271.     mov    fnc.wHandle,1
  272.  
  273.     mov    byte ptr dat.wScan,0
  274.     mov    byte ptr dat.wAscii,0
  275.     mov    byte ptr dat.wStatus,0
  276.     mov    word ptr dat.lpchMode,0
  277.     mov    word ptr dat.lpchMode+2,0
  278.     mov    word ptr dat.lpattrMode,0
  279.     mov    word ptr dat.lpattrMode+2,0
  280.     mov    word ptr dat.lpchSystem,offset buf[3*buf_size]
  281.     mov    word ptr dat.lpchSystem+2,ax
  282.     mov    word ptr dat.lpattrSystem,offset buf[4*buf_size]
  283.     mov    word ptr dat.lpattrSystem+2,ax
  284. ;    mov    word ptr dat.lpchBuf,0
  285. ;    mov    word ptr dat.lpchBuf+2,0
  286. ;    mov    word ptr dat.lpattrBuf,0
  287. ;    mov    word ptr dat.lpattrBuf+2,0
  288.     mov    word ptr dat.lpchHomonym,0
  289.     mov    word ptr dat.lpchHomonym+2,0
  290.     call    KKfunc
  291.     ret
  292. KKTrans    endp
  293.  
  294. ;
  295. ;
  296. ;
  297.  
  298. get_vct90h    macro
  299.         push    es
  300.         push    bx
  301.         mov    ax,3590h
  302.         int    21h
  303.         mov    word ptr vct_90h,bx
  304.         mov    ax,es
  305.         mov    word ptr vct_90h+2,ax
  306.         pop    bx
  307.         pop    es
  308.         endm
  309.  
  310. set_vct90h    macro
  311.         push    ds
  312.         push    dx
  313.         mov    dx,word ptr vct_90h
  314.         mov    ax,word ptr vct_90h+2
  315.         mov    ds,ax
  316.         mov    ax,2590h
  317.         int    21h
  318.         pop    dx
  319.         pop    ds
  320.         endm
  321.  
  322. INT90H        macro
  323.         pushf
  324.         call    [vct_90h]
  325.         endm
  326.  
  327. KYB_check    macro
  328.         mov    ah,07h
  329.         INT90H
  330.         endm
  331.  
  332. KYB_read    macro    sw
  333.         mov    ah,09h
  334.         mov    al,sw
  335.         INT90H
  336.         endm
  337.  
  338. KYB_matrix    macro
  339.         mov    di,offset key_tbl
  340.         mov    ah,0Ah
  341.         INT90H
  342.         endm
  343.  
  344. KYB_KindKb    macro
  345.         mov    ah,0FAh
  346.         int    90h
  347.         endm
  348.  
  349. KYB_setShift    macro
  350.         mov    ah,0FCh
  351.         INT90H
  352.         endm
  353.  
  354. KYB_read2_s    proc     near
  355. kr2s_lp1:    call    KYBN_check
  356.         cmp    dh,0FFh
  357.         je    kr2s_lp1
  358.         mov    ax,0900h
  359.         INT90H
  360.                 push    ax
  361.                 push    bx
  362.                 push    cx
  363.                 push    dx
  364.                 mov    cl,bh
  365. kr2s_apn31:     mov     ah,07h
  366.                 INT90H
  367.                 cmp     dh,0ffh
  368.                 je      kr2s_apn4
  369.  
  370.             cmp     bh,cl
  371.                 jne     kr2s_apn4
  372.  
  373.                 cmp     bh,4dh        ;bug fixed at v0.99
  374.                 je      kr2s_apn32
  375.                 cmp     bh,4fh
  376.                 je      kr2s_apn32
  377.                 cmp     bh,50h
  378.                 je      kr2s_apn32
  379.                 cmp     bh,51h
  380.                 je      kr2s_apn32
  381.         cmp    bh,4Bh
  382.         je    kr2s_apn32
  383.         cmp    bh,4Eh
  384.         je    kr2s_apn32
  385.                 cmp     bh,48h
  386.                 je      kr2s_apn32
  387.                 cmp     bh,72h
  388.                 je      kr2s_apn32
  389.                 cmp     bh,73h
  390.                 jne     kr2s_apn4
  391.  
  392. kr2s_apn32:     mov     ax,0900h
  393.                 INT90H
  394.                 jmp     kr2s_apn31
  395. kr2s_apn4:      
  396.                 pop     dx
  397.                 pop    cx
  398.                 pop     bx
  399.                 pop     ax
  400.                 ret
  401. KYB_read2_s    endp
  402.  
  403. KYB_read2    macro
  404.         call KYB_read2_s
  405.         endm
  406.  
  407. key_test    macro    scan
  408.         test    key_tbl[scan/8],(1 shl (scan mod 8))
  409.         endm
  410.  
  411. key_break    macro    scan
  412.         local    lp
  413. lp:            KYB_matrix
  414.             key_test    scan
  415.             jnz    short lp
  416.         endm
  417.  
  418. putchar        macro    char
  419.         mov    ah,1Dh
  420.         mov    al,char
  421.         int    91h
  422.         endm
  423.  
  424. getatr        macro
  425.         mov    di,offset color
  426.         mov    ah,12h
  427.         int    91h
  428.         endm
  429.  
  430. setatr        macro
  431.         mov    di,offset color
  432.         mov    ah,11h
  433.         int    91h
  434.         endm
  435.  
  436. getcur        macro
  437.         mov    ah,0Eh
  438.         int    91h
  439.         endm
  440.  
  441. setcur        macro
  442.         mov    ah,0Dh
  443.         int    91h
  444.         endm
  445.  
  446. com_atr        macro
  447.           mov    di,offset color
  448.           mov    ah,10h
  449.         int    91h
  450.         xor    byte ptr[di+1],28h
  451.         mov    ah,0Fh
  452.         int    91h
  453.         endm
  454. ;
  455. ; sjisto
  456. ;  bx:shift jis 漢字コード
  457. ;<return> bx:jis 漢字コード
  458. ;
  459.  
  460. sjisto    proc    near
  461.     cmp    bh,9fh
  462.     jbe    sjto1
  463.     sub    bh,0B1h-071h
  464. sjto1:  sub    bh,071h
  465.     shl    bh,1
  466.     inc    bh
  467.     cmp    bl,7fh
  468.     jbe    sjto2
  469.     dec    bl
  470. sjto2:    cmp    bl,9eh
  471.     jb    sjto3
  472.     sub    bl,7dh
  473.     inc    bh
  474.     jmp    sjto5
  475. sjto3:    sub    bl,1fh
  476. sjto5:    ret
  477. sjisto    endp
  478.  
  479. ;
  480. ; iskanji
  481. ;  bl:shift jis (上位)
  482. ;<return> C flug=1:漢字コード
  483. ;
  484.  
  485. iskanji        proc    near
  486.         cmp    bl,81h
  487.         jb     short ik1_ed
  488.         cmp    bl,0A0h
  489.         jae    short ik1_sk1
  490.         ret
  491. ik1_sk1:    cmp    bl,0E0h
  492.         jb    short ik1_ed
  493.         cmp    bl,0FDh
  494.         jae    short ik1_ed
  495.         ret
  496. ik1_ed:        clc
  497.         ret
  498. iskanji     endp
  499.  
  500.  
  501.  
  502. putatr        proc    near
  503.         push    di
  504.         mov    al,28h            ;attribute
  505.         mov    ah,[di]            ;color
  506.  
  507.         cmp    ah,7            ;白=>紫反転
  508.         jne    ps_sk10
  509.         mov    ah,3
  510.         jmp    ps_sk12
  511. ps_sk10:    cmp    ah,8            ;黒強調=>緑反転
  512.         jne    short ps_sk11
  513.         mov    ah,4
  514.         jmp    ps_sk12
  515. ps_sk11:    and    ah,07
  516.         cmp    ah,1            ;青=>白反転
  517.         jne    short ps_sk12
  518.         mov    ah,7
  519.  
  520. ps_sk12:    mov    di,offset color
  521.         mov    word ptr[di+1],ax
  522.         mov    ah,11h
  523.         int    91h
  524.         pop    di
  525.         ret
  526. putatr        endp
  527.  
  528.  
  529. putstr        proc    near
  530.         push    bp
  531.         push    bx
  532.         push    dx    ;+4
  533.         push    si    ;+2
  534.         push    di    ;+0
  535.         mov    bp,sp
  536.  
  537.         mov    cx,[di]
  538.         mov    ax,[si]
  539.         sub    cx,ax
  540.         jbe    ps_2
  541.         inc    cx        ;bug fixed at v0.99
  542.         inc    cx        ;
  543.         inc    cx        ;漢字コード対策用
  544.         cmp    al,0        ;
  545.         je    ps1_sk0        ;
  546.         inc    al        ;
  547. ps1_sk0:    add    dl,al
  548.         lea    di,[si+2]
  549.         shl    ax,2
  550.         add    di,ax
  551. ps1_lp1:    cmp    dl,80
  552.         jbe    ps1_sk1
  553.         sub    dl,80
  554.         inc    dh
  555. ps1_sk1:    mov    ah,14h
  556.         int    91h
  557.         mov    ah,10h
  558.         int    91h
  559. ps1_sk11:    mov    [di+3],bl
  560.         mov    [di],bh
  561.         add    di,4
  562.         inc    dl
  563.         loop    ps1_lp1
  564.  
  565. ps_2:        mov    di,[bp]
  566.         mov    cx,[di]
  567.         or    cx,cx
  568.         jne    ps_sk01
  569.         jmp    ps_sk1
  570.  
  571. ps_sk01:    mov    di,offset color
  572.         mov    ah,12h
  573.         int    91h
  574.         push    word ptr[color+1]
  575.         mov    di,[bp]
  576.  
  577.         mov    dx,[bp+4]        ;bug fixed at v1.01
  578.         mov    si,word ptr[di+2]
  579.         mov    di,word ptr[di+6]
  580. ps_lp1:
  581.         cmp    dl,80        ;bug fixed at v1.01
  582.         jb    ps_sk09        ;
  583.         test    dl,01h        ;
  584.         jne    ps_sk08        ;
  585.         inc    dl        ;
  586. ps_sk08:    sub    dl,80        ;
  587.         inc    dh        ;
  588. ps_sk09:
  589.         call    putatr
  590.         inc    di
  591.         
  592.         mov    bl,[si]            ;char:bug fixed at v1.01
  593.         xor    bh,bh
  594.         call    iskanji
  595.         jnc    ps_sk120
  596.  
  597.         mov    bh,bl
  598.         inc    si
  599.         mov    bl,[si]
  600.         call    sjisto
  601.         push    bx
  602.         mov    bl,bh
  603.         mov    bh,1
  604.         mov    ax,1300h
  605.         int    91h
  606.         pop    bx
  607.         mov    bh,3
  608.         inc    dl
  609.         dec    cx
  610.         call    putatr
  611.         inc    di
  612.  
  613. ps_sk120:    mov    ax,1300h
  614.         int    91h
  615.         inc    si
  616.         inc    dl
  617.         loop    ps_lp1
  618.  
  619.         pop    word ptr[color+1]
  620.         mov    di,offset color
  621.         mov    ah,11h
  622.         int    91h
  623.  
  624. ps_sk1:        mov    di,[bp]
  625.         mov    si,[bp+2]
  626.         mov    ax,[di]
  627.         mov    cx,[si]
  628.         mov    [si],ax
  629.         sub    cx,ax
  630.         jbe    short ps_end
  631.         inc    cx        ;bug fixed at v0.99
  632.         inc    cx        ;
  633.         mov    dx,[bp+4]
  634.         add    dl,al
  635.         lea    di,[si+2]
  636.         shl    ax,2
  637.         add    di,ax
  638. ps_lp2:        cmp    dl,80
  639.         jbe    ps3_sk1
  640.         sub    dl,80
  641.         inc    dh
  642. ps3_sk1:    mov    bl,[di+3]
  643.         mov    bh,[di]
  644.         mov    ax,1300h
  645.         int    91h
  646.         push    [di+2]
  647.         mov    byte ptr[di+3],0
  648.         mov    ah,0Fh
  649.         int    91h
  650.         pop    [di+2]
  651.         add    di,4
  652.         inc    dl
  653.         loop    ps_lp2
  654.  
  655. ps_end:        pop    di
  656.         pop    si
  657.         pop    dx
  658.         pop    bx
  659.         pop    bp
  660.         ret
  661. putstr        endp
  662.  
  663.  
  664.  
  665. clrstr        proc    near
  666.         mov    cx,[si]
  667.         or    cx,cx
  668.         je    short cs_end
  669.  
  670.         inc    cx        ;bug fixed at v0.99
  671.         inc    cx        ;
  672.         push    bx
  673.         lea    di,[si+2]
  674. cs_lp2:        cmp    dl,80
  675.         jbe    cs3_sk1
  676.         sub    dl,80
  677.         inc    dh
  678. cs3_sk1:    mov    bl,[di+3]
  679.         mov    bh,[di]
  680.         mov    ax,1300h
  681.         int    91h
  682.         mov    byte ptr[di+3],0
  683.         mov    ah,0Fh
  684.         int    91h
  685.         add    di,4
  686.         inc    dl
  687.         loop    cs_lp2
  688.         pop    bx
  689. cs_end:        ret
  690. clrstr        endp
  691.  
  692.  
  693. mode_chg    proc    near
  694.  
  695.         push    di
  696.         push    ax
  697.         push    cx
  698.  
  699.         test    modeW,01h
  700.           jz    short krn_edsk0
  701.             mov        modeW,8055h
  702.             test    bl,02h
  703.             jz        short krn_edsk0
  704.               xor    modeW,0C0h
  705.  
  706. krn_edsk0:    test    modeW,0008h
  707.         jne    short krn_edsk1
  708.           test    modeW,180h
  709.           jz    short krn_edsk1
  710.           or    bl,02h
  711.           mov    al,bl
  712.          jmp    short krn_edsk2
  713.  
  714. krn_edsk1:      and    bl,0FDh
  715.           mov    al,bl
  716. krn_edsk2:      KYB_setShift
  717.  
  718.         test    modeW,0002h
  719.         je    short krnc_sk11
  720.           mov    word ptr modeS[0],4134h        ;'漢'
  721.          jmp    short krnc_sk2
  722. krnc_sk11:      mov    word ptr modeS[0],2121h        ;'  '
  723. krnc_sk2:    test    modeW,0008h
  724.         je    short krnc_sk21
  725.           mov    modeS[4],'R'
  726.          jmp    short krnc_sk3
  727. krnc_sk21:      mov    modeS[4],' '
  728. krnc_sk3:    test    modeW,0020h
  729.         je    short krnc_sk31
  730.           mov    word ptr modeS[2],3441h        ;'全'
  731.          jmp    short krnc_sk4
  732. krnc_sk31:      mov    word ptr modeS[2],2121h        ;'  '
  733. krnc_sk4:    test    modeW,0040h
  734.         je    short krnc_sk42
  735.           mov    word ptr modeS[5],5131h        ;'英'
  736.           test    bl,01h
  737.           je    short krnc_sk411
  738.             mov    word ptr modeS[7],6742h        ;'大'
  739.            jmp    short krnc_sk5
  740. krnc_sk411:        mov    word ptr modeS[7],2E3Eh        ;'小'
  741.            jmp    short krnc_sk5
  742. krnc_sk42:    test    modeW,0080h
  743.         je    short krnc_sk43
  744.           mov    word ptr modeS[5],2B25h        ;'カナ'
  745.           mov    word ptr modeS[7],4A25h
  746.          jmp    short krnc_sk5
  747. krnc_sk43:      mov    word ptr modeS[5],2B24h        ;'かな'
  748.           mov    word ptr modeS[7],4A24h
  749.  
  750. krnc_sk5:    mov    cx,9
  751.         mov    dl,72+80h
  752.         mov    di,offset modeB
  753.         mov    ax,1F01h
  754.         int    91h
  755.         mov    ax,modeW
  756.         mov    fnc.wMode,ax
  757.         call    KKMode
  758.  
  759.         pop    cx
  760.         pop    ax
  761.         pop    di
  762.         ret
  763. mode_chg    endp
  764.  
  765. ;
  766. ;
  767. ;
  768.  
  769. KYBN_check    proc    near
  770.         KYB_matrix
  771.         KYB_check
  772.         cmp    dh,0FFh
  773.         je    krn_sk1
  774.  
  775.         cmp    dh,80h        ;PF key?
  776.         jne    kcn_sk1
  777.  
  778. ;
  779. ; For oyayubi shift
  780. ;
  781.         cmp    bh,57h        ;
  782.         je    kcn_sk0
  783.         cmp    bh,58h        ;
  784.         jne    kcn_sk01
  785. kcn_sk0:    cmp    k_kind,1    ;JIS?
  786.         je    kcn_sk01
  787.               and    modeW,803Fh
  788.               or    modeW,100h
  789.         push    dx        ; Bug Fix By Ken
  790.         push    bx
  791.         call    mode_chg
  792.         pop    bx
  793.         pop    dx
  794.         jmp    kcn_sk2        ; Bug Fix at v1.03
  795. kcn_sk01:    jmp    kcn_sk3
  796.  
  797.  
  798. kcn_sk1:    test    modeW,0020h    ;全角?
  799.         jne    kcn_sk2
  800.         test    modeW,0040h    ;英数入力モード?
  801.         jne    kcn_sk3
  802.         test    modeW,0108h    ;ローマ字入力モード or ひらがな?
  803.         jne    kcn_sk2
  804.         jmp    kcn_sk3        ;かな入力モード and かたかな.
  805.  
  806. kcn_sk2:    mov    ah,0FFh        ;変換の必要有り
  807.         ret
  808. kcn_sk3:    mov    ah,0        ;変換の必要なし
  809.         ret
  810.  
  811.  
  812. ;
  813. ; For JIS keybord
  814. ;
  815. krn_sk1:      key_test    sCAP
  816.           jz    short krn_sk2
  817.             key_break    sCAP
  818.            jmp    krn_end1
  819.  
  820. krn_sk2:      key_test    sHIRA
  821.           jz    short krn_sk3
  822.             test    bl,10h        ;CTRL
  823.             jz    short krn_sk22
  824.               test    Slock,TRUE
  825.               jnz    krn_sk21
  826.               xor    modeW,0Ch
  827. krn_sk21:          key_break    sHIRA
  828.              jmp    krn_end1
  829. krn_sk22:          test    Slock,TRUE
  830.               jnz    krn_sk23
  831.               xor    modeW,140h
  832. krn_sk23:          test    modeW,100h
  833.               je    short krn_sk21
  834.                and    modeW,813Fh
  835.              jmp    short krn_sk21
  836. krn_sk3:      key_test    sKATA
  837.           jz    short krn_sk4
  838.               test    Slock,TRUE
  839.               jnz    krn_sk32
  840.             xor        modeW,80h
  841.             test    modeW,80h
  842.             je        short krn_sk31
  843.               and    modeW,80BFh
  844.              jmp    short krn_sk32
  845. krn_sk31:          and    modeW,803Fh
  846.               or    modeW,40h
  847. krn_sk32:          key_break    sKATA
  848.               jmp    krn_end1
  849.  
  850. ;
  851. ; For oyayubi shift keybord
  852. ;
  853. krn_sk4:
  854.           key_test    sEIJI
  855.           jz    short krn_sk5
  856.             test    bl,10h        ;CTRL
  857.             jz    short krn_sk42
  858.               test    Slock,TRUE
  859.               jnz    krn_sk41
  860.               xor    modeW,0Ch
  861. krn_sk41:          key_break    sEIJI
  862.              jmp    krn_end1
  863. krn_sk42:          test    Slock,TRUE
  864.               jnz    krn_sk41
  865.               and    modeW,803Fh
  866.               or        modeW,040h
  867.              jmp    short krn_sk41
  868.  
  869. krn_sk5:      key_test    sEIKO
  870.           jz    short krn_sk6
  871.             test    Slock,TRUE
  872.             jnz        krn_sk52
  873.             test    modeW,040h
  874.             jne        krn_sk52
  875.              and        modeW,803Fh
  876.              or        modeW,080h
  877. krn_sk52:        key_break    sKATA
  878.             jmp    short krn_end1
  879.  
  880. ;
  881. ;
  882. ;
  883. krn_sk6:      key_test    sZENHAN
  884.           jz    krn_sk7
  885.               test    Slock,TRUE
  886.               jnz    krn_sk61
  887.             xor    modeW,30h
  888. krn_sk61:          key_break    sZENHAN
  889.             jmp    krn_end1
  890. krn_sk7:      key_test    sKANJI
  891.           jz    short krn_end2
  892.               test    Slock,TRUE
  893.               jnz    krn_sk71
  894.             xor        modeW,03h
  895. krn_sk71:        key_break    sKANJI
  896.  
  897. krn_end1:    call    mode_chg
  898.         mov    dx,0FFFFh
  899.         mov    bh,0FFh
  900. krn_end2:    ret
  901. KYBN_check    endp
  902.  
  903.  
  904.  
  905. enter_word    proc    near
  906.  
  907.         test    modeW,01h
  908.         jz    short ew_ent
  909.         jmp    ew_end3
  910.  
  911. ew_ent:        push    bp
  912.         push    dx
  913.         push    bx
  914.         push    ax
  915.  
  916.         mov    Slock,TRUE
  917.     mov    ax,ds
  918.     mov    byte ptr dat.wType,1
  919.     mov    word ptr dat.lpchResult,offset buf[0]
  920.     mov    word ptr dat.lpchResult+2,ax
  921.     mov    dat.cchResult,0
  922.  
  923.         getcur
  924.         push    dx
  925.         mov    bp,sp
  926.         mov    bak_xy,dx
  927.  
  928.         mov    dx,1901h
  929.         mov    di,offset dat.cchSystem
  930.         mov    word ptr[di],t1_msgL
  931.         mov    word ptr[di+2],offset t1_msg
  932.         mov    word ptr[di+6],offset t1_atr
  933.         mov    si,offset old_cchS
  934.         call    putstr
  935.  
  936. ew_lp1:        mov    dx,bak_xy
  937.         setcur
  938.         KYB_read2
  939.         mov    dx,bak_xy
  940.         cmp    bh,4Fh        ;left
  941.         jne    ew_sk1
  942.           dec    dl
  943.           cmp    dl,1
  944.           jae    ew_sk01
  945.             mov    dl,MAX_X
  946. ew_sk01:      mov    ah,14h
  947.           int    91h
  948.           cmp    bh,3
  949.           jne    ew_sk51
  950.             dec    dl
  951.           jmp    ew_sk51
  952. ew_sk1:        cmp    bh,51h        ;right
  953.         jne    ew_sk2
  954.           inc    dl
  955.           cmp    dl,MAX_X
  956.           jbe    ew_sk5
  957.             mov    dl,1
  958.           jmp    ew_sk5
  959. ew_sk2:        cmp    bh,4Dh        ;up
  960.         jne    ew_sk3
  961.           dec    dh
  962.           cmp    dh,1
  963.           jae    ew_sk5
  964.             mov    dh,MAX_Y
  965.           jmp    ew_sk5
  966. ew_sk3:        cmp    bh,50h        ;down
  967.         jne    ew_sk4
  968.           inc    dh
  969.           cmp    dh,MAX_Y
  970.           jbe    ew_sk5
  971.             mov    dh,1
  972.           jmp    ew_sk5
  973. ew_sk4:        cmp    bh,72h        ;[取消]
  974.         jne    ew_sk41
  975.         jmp    ew_end
  976. ew_sk41:    cmp    bh,73h        ;[実行]
  977.         je    ew_next1
  978. ew_sk5:        mov    ah,14h
  979.         int    91h
  980.         cmp    bh,3
  981.         jne    ew_sk51
  982.           inc    dl
  983. ew_sk51:    mov    bak_xy,dx
  984.         jmp    ew_lp1
  985.  
  986. ew_next1:    mov    dx,bak_xy
  987.         mov    ent_xy,dx
  988.  
  989.         mov    dx,1901h
  990.         mov    di,offset dat.cchSystem
  991.         mov    word ptr[di],t2_msgL
  992.         mov    word ptr[di+2],offset t2_msg
  993.         mov    word ptr[di+6],offset t1_atr
  994.         mov    si,offset old_cchS
  995.         call    putstr
  996.  
  997.         xor    cx,cx
  998. ew_lp2:        mov    dx,bak_xy
  999.         setcur
  1000.         KYB_read2
  1001.         mov    dx,bak_xy
  1002.           push    bx
  1003.           mov    di,word ptr dat.lpchResult
  1004.           add    di,cx
  1005.           mov    ah,14h
  1006.           int    91h
  1007.           test    bh,1
  1008.           jne    ew_sk73
  1009.           mov    [di],bl
  1010.           jmp    ew_sk6001
  1011.  
  1012. ew_sk73:      push    dx
  1013.           push    bx
  1014.           inc    dl
  1015.           mov    ah,14h
  1016.           int    91h
  1017.           pop    dx
  1018.           mov    dh,bl
  1019.           mov    ah,03
  1020.           int    0AFh
  1021.           xchg    dh,dl
  1022.           mov    [di],dx
  1023.           pop    dx
  1024. ew_sk6001:      pop    bx
  1025.  
  1026.         cmp    bh,4Fh        ;left
  1027.         jne    ew_sk7
  1028.           dec    dl
  1029.           dec    cx
  1030.           cmp    cx,0
  1031.           jns    ew_sk601
  1032.           inc    dl
  1033.           inc    cx
  1034.           jmp    ew_sk9
  1035. ew_sk601:      cmp    dl,1
  1036.           jae    ew_sk61
  1037.             mov    dl,MAX_X
  1038.             dec    dh
  1039. ew_sk61:      com_atr
  1040.           cmp    byte ptr[di],3
  1041.           jne    ew_sk62
  1042.             dec    dl
  1043.             dec    cx
  1044.             com_atr
  1045. ew_sk62:      jmp    ew_sk9
  1046. ew_sk7:        cmp    bh,51h        ;right
  1047.         jne    ew_sk8
  1048.           com_atr
  1049.           inc    dl
  1050.           inc    cx
  1051.           cmp    cx,buf_size
  1052.           jbe    ew_sk701
  1053.           dec    dl
  1054.           dec    cx
  1055.           com_atr
  1056.           jmp    ew_sk9
  1057. ew_sk701:      cmp    dl,MAX_X
  1058.           jbe    ew_sk71
  1059.             mov    dl,1
  1060.             inc    dh
  1061. ew_sk71:        mov    di,offset color
  1062.             mov    ah,10h
  1063.           int    91h
  1064.           cmp    byte ptr[di],3
  1065.           jne    ew_sk9
  1066.             xor    byte ptr[di+1],28h
  1067.             mov    ah,0Fh
  1068.             int    91h
  1069.             inc    dl
  1070.             inc    cx
  1071.           jmp    ew_sk9
  1072. ew_sk8:        cmp    bh,72h        ;[取消]
  1073.         jne    ew_sk81
  1074.         jmp    ew_end
  1075. ew_sk81:    cmp    bh,73h        ;[実行]
  1076.         je    ew_next2
  1077. ew_sk9:        mov    bak_xy,dx
  1078.         jmp    ew_lp2
  1079.  
  1080. ew_next2:    mov    dat.cchResult,cx
  1081.         mov    dx,ent_xy
  1082.         setcur
  1083. ew_lp3:        com_atr
  1084.         inc    dl
  1085.         cmp    dl,MAX_X
  1086.         jbe    ew_lp31
  1087.           mov    dl,1
  1088.           inc    dh
  1089. ew_lp31:    loop    ew_lp3
  1090.  
  1091.         cmp    dat.cchResult,0
  1092.         je    ew_end
  1093.         call    KKTrans
  1094.  
  1095. ew_lp4:        mov    dx,1901h
  1096.         mov    di,offset dat.cchSystem
  1097.         mov    si,offset old_cchS
  1098.         call    putstr
  1099.         mov    dx,ent_xy
  1100.         mov    di,offset dat.cchBuf
  1101.         mov    si,offset old_cchB
  1102.         call    putstr
  1103.         mov    dx,[bp]
  1104.         setcur
  1105.  
  1106.         KYB_read2
  1107.         mov    byte ptr dat.wType,0
  1108.         mov    byte ptr dat.wScan,bh
  1109.         mov    byte ptr dat.wAscii,dl
  1110.         mov    byte ptr dat.wStatus,bl
  1111.         call    KKInOut
  1112.         cmp    dat.cchSystem,0
  1113.         jne    ew_lp4
  1114.  
  1115. ew_end:        mov    dx,1901h
  1116.         mov    si,offset old_cchS
  1117.         call    clrstr
  1118.         mov    old_cchS,0
  1119.         mov    dx,ent_xy
  1120.         mov    si,offset old_cchB
  1121.         call    clrstr
  1122.         mov    old_cchB,0
  1123.     mov    dat.cchSystem,0
  1124.     mov    word ptr dat.lpchSystem,offset buf[3*buf_size]
  1125.     mov    word ptr dat.lpchSystem+2,ax
  1126.     mov    word ptr dat.lpattrSystem,offset buf[4*buf_size]
  1127.     mov    word ptr dat.lpattrSystem+2,ax
  1128.  
  1129.         pop    dx
  1130.         setcur
  1131.         mov    Slock,FALSE
  1132.         pop    ax
  1133.         pop    bx
  1134.         pop    dx
  1135.         pop    bp
  1136. ew_end3:    ret
  1137. enter_word    endp
  1138.  
  1139. ;
  1140. ;
  1141. ;
  1142. key_bios    proc    far
  1143.         cmp    ah,09h        ;key_read
  1144.         je    b09_n
  1145.         cmp    ah,07h        ;key_check
  1146.         je    b07
  1147.         jmp    cs:[vct_90h]
  1148.  
  1149. b09_n:        jmp    b09
  1150.  
  1151. b07:        push    bp    ;+16
  1152.         push    es    ;+14
  1153.         push    ds    ;+12
  1154.         push    si    ;+10
  1155.         push    di    ;+8
  1156.         push    dx    ;+6
  1157.         push    cx    ;+4
  1158.         push    bx    ;+2
  1159.         push    ax    ;+0
  1160.         mov    bp,sp
  1161.         mov    ax,cs
  1162.         mov    ds,ax
  1163.         mov    es,ax
  1164.         sti
  1165.  
  1166.         cmp    dat.cchResult,0
  1167.         je    b07_sk11
  1168.         mov    cx,cchR_p
  1169.         cmp    cx,dat.cchResult
  1170.         jae    short b07_sk1
  1171.         mov    si,word ptr dat.lpchResult
  1172.         add    si,cchR_p
  1173.         xor    dh,dh
  1174.         mov    dl,[si]
  1175.         mov    bh,byte ptr dat.wScan    ;bug fixed at v1.01
  1176.         cmp    enc_cnt,0
  1177.         je    v101_fx1
  1178.         xor    bh,bh
  1179. v101_fx1:    mov    bl,byte ptr dat.wStatus
  1180.         mov    al,byte ptr dat.cchResult
  1181.         sub    al,byte ptr cchR_p
  1182.         jmp    b07_sk3
  1183.  
  1184. b07_sk1:    mov    cchR_p,0
  1185.         mov    dat.cchResult,0
  1186.         mov    al,0
  1187.         mov    dx,0FFFFh
  1188.         mov    bx,0FF00h
  1189.         jmp    b07_sk3
  1190.  
  1191. b07_sk11:    call    KYBN_check
  1192.         cmp    word ptr dat.cchBuf,0    ;未確定文字列があるか?
  1193.         jne    b07_sk2
  1194.         cmp    dh,0FFh
  1195.         je    b07_sk3
  1196. ;        cmp    dx,8015h    ;単語登録?
  1197.         cmp    bh,6Dh        ;単語登録? (Bug Fix By Ken)
  1198.         jne    b07_sk12
  1199.         mov    ax,0900h
  1200.         INT90H
  1201.         call    enter_word
  1202.         mov    al,0
  1203.         mov    dx,0FFFFh
  1204.         mov    bx,0FF00h
  1205.         jmp    b07_sk3
  1206. b07_sk12:    cmp    ah,0FFh        ;変換の必要ありか?
  1207.         jne    b07_sk3        ;無い。
  1208.  
  1209. b07_sk2:    mov    al,1
  1210.         mov    bx,0
  1211.         mov    dx,0
  1212.  
  1213. b07_sk3:    mov    [bp],al
  1214.         mov    [bp+2],bx
  1215.         mov    [bp+6],dx
  1216.         jmp    kr_end23
  1217.  
  1218. b09:        push    bp    ;+16
  1219.         push    es    ;+14
  1220.         push    ds    ;+12
  1221.         push    si    ;+10
  1222.         push    di    ;+8
  1223.         push    dx    ;+6
  1224.         push    cx    ;+4
  1225.         push    bx    ;+2
  1226.         push    ax    ;+0
  1227.         mov    bp,sp
  1228.         mov    ax,cs
  1229.         mov    ds,ax
  1230.         mov    es,ax
  1231.         sti
  1232.  
  1233.         mov    cx,cchR_p
  1234.         cmp    cx,dat.cchResult
  1235.         jae    short kr_sk1
  1236.         mov    si,word ptr dat.lpchResult
  1237.         add    si,cx
  1238.         xor    dh,dh
  1239.         mov    dl,[si]
  1240.         mov    bh,byte ptr dat.wScan    ;bug fixed at v1.01
  1241.         cmp    enc_cnt,0
  1242.         je    v101_fx2
  1243.         xor    bh,bh
  1244.         dec    enc_cnt
  1245. v101_fx2:    mov    bl,byte ptr dat.wStatus
  1246.         mov    [bp+2],bx
  1247.         mov    [bp+6],dx
  1248.         inc    cchR_p
  1249.         jmp    kr_end23
  1250.  
  1251. kr_sk1:        cmp    kancnvflg,0        ; Apend OAKLIB by Ken
  1252.         je    ken_fix1
  1253.         mov    kancnvflg,0
  1254.  
  1255.         cmp    byte ptr[bp],1        ;No wait key in?
  1256.         jne    ken_fix1
  1257.  
  1258.         mov    bh,0FFH
  1259.         mov    bl,byte ptr dat.wStatus
  1260.         mov    dx,0FFFFh
  1261.         jmp    ken_fix2        ; Return to Null Char
  1262.  
  1263. ken_fix1:    mov    cchR_p,0
  1264.         mov    dat.cchResult,0
  1265.  
  1266.         getatr
  1267.         getcur
  1268.         mov    bak_xy,dx
  1269.  
  1270.         cmp    word ptr dat.cchSystem,0
  1271.         je    kr_sk101    ;bug fixed at v1.00
  1272.         mov    dx,1901h
  1273.         mov    di,offset dat.cchSystem
  1274.         mov    si,offset old_cchS
  1275.         call    putstr
  1276.  
  1277. kr_sk101:    cmp    word ptr dat.cchBuf,0    ;bug fixed at v1.01
  1278.         je    short kr_sk11
  1279.         mov    di,offset dat.cchBuf
  1280.         mov    si,offset old_cchB
  1281.         call    putstr
  1282.  
  1283.         mov    dx,bak_xy
  1284.         add    dl,byte ptr dat.cchBufCursor
  1285.         cmp    dl,80        ;bug fixed at v1.01
  1286.         jb    kr_sk11        ;
  1287.         test    dl,01h        ;
  1288.         jne    kr_sk102    ;
  1289.         inc    dl        ;
  1290. kr_sk102:    sub    dl,80        ;
  1291.         inc    dh        ;
  1292. kr_sk11:    setcur
  1293.  
  1294. kr_lp1:        call    KYBN_check
  1295.         cmp    dh,0FFh            ;No key in?
  1296.         jne    short kr_sk2        ;No.
  1297.         cmp    byte ptr[bp],1        ;No wait key in?
  1298.         jne    short kr_lp1        ;No.
  1299. kr_lp11:    cmp    word ptr dat.cchBuf,0
  1300.         jne    short kr_lp1
  1301.  
  1302. kr_lp12:
  1303.         cmp    bh,57h            ;変換,無変換を返さない
  1304.         je    kr_lp1            ;ようにした  by Ken
  1305.         cmp    bh,58h
  1306.         je    kr_lp1
  1307. ken_fix2:    mov    [bp+2],bx
  1308.         mov    [bp+6],dx
  1309.         jmp    kr_end23
  1310.  
  1311. kr_sk2:        push    ax
  1312.         mov    ax,0900h        ;dummy read
  1313.         INT90H
  1314.         pop    ax
  1315.         cmp    word ptr dat.cchBuf,0    ;未確定文字列があるか?
  1316.         jne    kr_sk22
  1317. ;        cmp    dx,8015h    ;単語登録?
  1318.         cmp    bh,6Dh        ;単語登録? (Bug Fix By Ken)
  1319.         jne    kr_sk21
  1320.         call    enter_word
  1321.         mov    dx,0FFFFh
  1322.         mov    bx,0FF00h
  1323.         jmp    kr_lp1
  1324. kr_sk21:    cmp    ah,0FFh        ;変換の必要ありか?
  1325.         jne    kr_lp12        ;無。
  1326.  
  1327. kr_sk22:    mov    byte ptr dat.wType,0
  1328.         mov    byte ptr dat.wScan,bh
  1329.         mov    byte ptr dat.wAscii,dl
  1330.         mov    byte ptr dat.wStatus,bl
  1331.  
  1332.         mov    si,offset enc_str    ;bug fixed at v1.00
  1333.         mov    enc_cnt,1
  1334.         mov    [si],dl
  1335.         inc    si
  1336.  
  1337. ;Bug Fixed by K.MIYAZAKI
  1338. ;   Thanks a lot!!
  1339. ;
  1340.                 mov     ah,1eh
  1341.                 cmp     bh,4dh
  1342.                 je      ken_apn2
  1343.                 mov     ah,1dh
  1344.                 cmp     bh,4fh
  1345.                 je      ken_apn2
  1346.                 mov     ah,1fh
  1347.                 cmp     bh,50h
  1348.                 je      ken_apn2
  1349.                 mov     ah,1ch
  1350.                 cmp     bh,51h
  1351.                 je      ken_apn2
  1352.  
  1353.         mov    ah,7Fh
  1354.         cmp    bh,4Bh
  1355.         je    ken_apn2
  1356.         mov    ah,0Bh
  1357.         cmp    bh,4Eh
  1358.         je    ken_apn2
  1359.  
  1360.                 mov     ah,1bh
  1361.                 cmp     bh,48h
  1362.                 je      ken_apn2
  1363.                 cmp     bh,72h
  1364.                 je      ken_apn2
  1365.                 cmp     bh,73h
  1366.                 je      ken_apn2    ;bug fixed at v1.04a
  1367.  
  1368.         cmp    dh,80h        ;bug fixed at v1.04a
  1369.         jne    ken_apn5    ;
  1370.         mov    ah,1Eh        ;
  1371.         cmp    bh,58h        ;
  1372.         je    ken_apn2    ;
  1373.         mov    ah,1Fh        ;
  1374.         cmp    bh,57h        ;
  1375.         jne    ken_apn5    ;
  1376.  
  1377.  
  1378. ken_apn2:
  1379.             cmp     old_cchS,0
  1380.                 jne     ken_apn3
  1381.                 cmp     old_cchB,0
  1382.                 jne     ken_apn3
  1383.                 jmp     kr_lp12
  1384. ken_apn3:       
  1385.                 mov     byte ptr dat.wAscii,ah
  1386.  
  1387.                 push    ax
  1388.                 push    bx
  1389.                 push    dx
  1390. ken_apn31:      mov     ah,07h
  1391.                 INT90H
  1392.                 cmp     dh,0ffh
  1393.                 je      ken_apn4
  1394.                 cmp     bh,byte ptr dat.wScan
  1395.                 jne     ken_apn4
  1396.                 mov     ax,0900h
  1397.                 INT90H
  1398.         mov    [si],dl        ;bug fixed at v1.00
  1399.         inc    si
  1400.         inc    enc_cnt
  1401.         jmp    ken_apn31
  1402.  
  1403. ken_apn4:       
  1404.                 pop     dx
  1405.                 pop     bx
  1406.                 pop     ax
  1407. ken_apn5:       
  1408. ;
  1409. ;
  1410. ;
  1411.  
  1412.         call    KKInOut
  1413.  
  1414.         cmp    [dat.cchResult],0    ;No result string?
  1415.         jne    kr_sk3            ;No.
  1416.  
  1417.         mov    dx,1901h
  1418.         mov    di,offset dat.cchSystem
  1419.         mov    si,offset old_cchS
  1420.         call    putstr
  1421.  
  1422.         mov    dx,bak_xy
  1423.         mov    di,offset dat.cchBuf
  1424.         mov    si,offset old_cchB
  1425.         call    putstr
  1426.  
  1427.         mov    dx,bak_xy
  1428.         add    dl,byte ptr dat.cchBufCursor
  1429.         cmp    dl,80        ;bug fixed at v1.01
  1430.         jb    kr_sk23        ;
  1431.         test    dl,01h        ;
  1432.         jne    kr_sk230    ;
  1433.         inc    dl        ;
  1434. kr_sk230:    sub    dl,80        ;
  1435.         inc    dh        ;
  1436. kr_sk23:    setcur
  1437.  
  1438.         mov    kancnvflg,1        ; Apend OAKLIB by Ken
  1439.  
  1440.         jmp    kr_lp1
  1441.  
  1442. kr_sk3:
  1443. ;        cmp    dat.cchBuf,0        ;bug fixed at v1.00
  1444. ;        jne    kr_sk301
  1445.  
  1446.         mov    di,word ptr[dat.lpchResult]
  1447.         add    di,dat.cchResult
  1448.         dec    di
  1449.         mov    si,offset enc_str
  1450.         mov    cx,enc_cnt
  1451.  
  1452.         mov    al,byte ptr dat.wAscii    ;キーコードの復元が必要か?
  1453.         cmp    al,[di]
  1454.         je    kr_sk309    ; Do Cnvert
  1455.         dec    enc_cnt        ; エンコ-ドの禁止 by Ken
  1456.         jmp    kr_sk301
  1457.  
  1458. kr_sk309:    repnz    movsb
  1459.         mov    cx,dat.cchResult
  1460.         add    cx,enc_cnt
  1461.         dec    cx
  1462.         mov    dat.cchResult,cx
  1463.  
  1464. kr_sk301:    mov    si,word ptr[dat.lpchResult]
  1465.         cmp    dl,[si]
  1466.         je    short kr_sk31
  1467.  
  1468. kr_sk4:        mov    dl,[si]        ;bug fixed at v1.01
  1469.         xor    dh,dh
  1470.         xor    bh,bh
  1471.  
  1472. kr_sk31:    mov    [bp+2],bx
  1473.         mov    [bp+6],dx
  1474.         jmp    kr_end1
  1475.  
  1476.         cmp    old_cchS,0
  1477.         je    kr_end1
  1478.         mov    dx,1901h
  1479.         mov    si,offset old_cchS
  1480.         call    clrstr
  1481.         mov    old_cchS,0
  1482. kr_end1:    cmp    old_cchB,0
  1483.         je    kr_end12
  1484.         mov    dx,bak_xy
  1485.         mov    si,offset old_cchB
  1486.         call    clrstr
  1487.         mov    old_cchB,0
  1488. kr_end12:    mov    dx,bak_xy
  1489.         setcur
  1490.  
  1491. kr_end2:    mov    cchR_p,1
  1492.         mov    ax,dat.cchResult    ;bug fixed at v1.01
  1493.         sub    ax,enc_cnt
  1494.         dec    ax
  1495.         jns    kr_end20
  1496.         xor    ax,ax
  1497. kr_end20:    mov    enc_cnt,ax
  1498. kr_end23:    pop    ax
  1499.         pop    bx
  1500.         pop    cx
  1501.         pop    dx
  1502.         pop    di
  1503.         pop    si
  1504.         pop    ds
  1505.         pop    es
  1506.         pop    bp
  1507.         xor    ah,ah
  1508.         iret
  1509. key_bios    endp
  1510.  
  1511. ;
  1512. ;
  1513. ;
  1514.         public    oak_set
  1515. oak_set        proc    near
  1516.         mov    ax,cs
  1517.         mov    ds,ax
  1518.         mov    es,ax
  1519.         mov    word ptr modeB[0],offset modeS    ;System line
  1520.         mov    word ptr modeB[2],ax
  1521.         mov    word ptr modeB[4],offset modeA
  1522.         mov    word ptr modeB[6],ax
  1523.         mov    ah,0
  1524.         int    91h
  1525.  
  1526.         KYB_KindKb
  1527.         mov    k_kind,al
  1528.  
  1529.         call    KKOpen            ;oak/2 open
  1530.  
  1531.         mov    ax,0F900h        ; key bios status dsp off
  1532.         int    90h
  1533.  
  1534.         mov    cx,9            ;print mode
  1535.         mov    dl,72+80h
  1536.         mov    di,offset modeB
  1537.         mov    ax,1F01h
  1538.         int    91h
  1539.  
  1540.         mov    ah,07h            ;set shift mode
  1541.         int    90h
  1542.         mov    ax,modeW
  1543.         mov    fnc.wMode,ax
  1544.         call    KKMode
  1545.         mov    byte ptr dat.wType,0        ;リフレッシュ
  1546.         mov    byte ptr dat.wScan,0
  1547.         mov    byte ptr dat.wAscii,0
  1548.         mov    byte ptr dat.wStatus,0
  1549.         call    KKInOut
  1550.         mov    dat.cchResult,0
  1551.         mov    dat.cchSystem,0
  1552.         mov    dat.cchBuf,0
  1553.         mov    old_cchS,0
  1554.         mov    old_cchB,0
  1555.         mov    cchR_p,0
  1556.  
  1557.         get_vct90h
  1558.         mov    dx,offset key_bios
  1559.         mov    ax,2590h
  1560.         int    21h
  1561.  
  1562.         ret
  1563. oak_set        endp
  1564.  
  1565.         public    oak_reset
  1566. oak_reset    proc    near
  1567.         set_vct90h
  1568.         call    KKClose
  1569.         mov    ax,0F901h        ;ステータス表示on
  1570.         int    90h
  1571.         ret
  1572. oak_reset    endp
  1573.  
  1574. _TEXT    ENDS
  1575.         end
  1576.